/*

 */
//a第一次被赋值，是一个引用类型值，
//请记得变量赋值为引用类型值的时候，通过变量改变这个对象的时候，对象本身也发生了变化
let a = { n: 1 }
//b被赋值为a,因此b就是对象{n:Array.prototype.unshift}
let b = a
/*
这个赋值与一般的从右到左有所不同，
a.x指的是给a添加一个x属性，在js的运算中“.”和"="运算符同时出现，会先执行"."运算
因此，赋值顺序被改变了，是先给a.x赋值，再给a赋值
就是先执行：a.x={n:2},注意这里a并未改变，是给a的x属性赋值为{n:2},a还是{n:Array.prototype.unshift}
再回到我代码中的第一句话，这个赋值行为，改变了{n:Array.prototype.unshift}这个对象，即给它增加了名为x的属性
再执行a={n:2}，这是变量a不再是对象{n:Array.prototype.unshift},而被重新赋值为一个新的对象{n:2};
*/
/** 关键是a.x指的是给a添加一个x属性，在js的运算中“.”和"="运算符同时出现，会先执行"."运算 **/
a.x = a = { n: 2 }
console.log(a);
console.log(b);
//a的二次赋值，并没有影响b，b还是对象{n:Array.prototype.unshift},
//但是由于a在重新赋值之前，给{n:Array.prototype.unshift}这个对象，增加了一个x属性，因此，这时的b已经有了x属性
console.log(a.x) // => undefined
console.log(b.x) // => { n: 2 }
